home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / OSCFlavor.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  9.0 KB  |  256 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.xml.dt.DataType;
  4. import com.extensibility.xml.dt.DataTypeFactory;
  5. import com.extensibility.xml.dt.DataTypeIntf;
  6. import java.io.IOException;
  7.  
  8. class OSCFlavor extends XDRFlavor implements ExtraMetaDataUIIntf {
  9.    static String NAME = "osc";
  10.    static String[] NAMESPACES = new String[]{"osc", "urn:schemas-onesoft-com:extensions"};
  11.    static Class[] EL_CLASSES = new Class[]{Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String")};
  12.    static int[] EL_WIDTHS = new int[]{80, 80, 70, 70, 70, 80, 150, 150};
  13.    static double[] EL_WEIGHTS = new double[]{0.1, 0.1, 0.01, 0.01, 0.01, 0.01, 0.1, 0.1};
  14.    static String[] EL_METAPROPS = new String[]{"osc:dt", "osc:fkey", "osc:fullText", "osc:length", "osc:destroy", "osc:noScript", "osc:pkey", "osc:storageName"};
  15.    static String[] EL_NAMES = new String[]{"dt", "fkey", "fullText", "length", "destroy", "noScript", "pkey", "storageName"};
  16.    static boolean[] EL_IS_LIST = new boolean[]{false, false, false, false, false, false, true, false, false};
  17.    static Class[] CP_CLASSES = new Class[]{Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String")};
  18.    static int[] CP_WIDTHS = new int[]{0, 0, 0};
  19.    static double[] CP_WEIGHTS = new double[]{0.3, 0.3, 0.4};
  20.    static String[] CP_METAPROPS = new String[]{"osc:defaultCreate", "osc:defaultSet", "osc:rename"};
  21.    static String[] CP_NAMES = new String[]{"defaultCreate", "defaultSet", "rename"};
  22.    static boolean[] CP_IS_LIST = new boolean[]{false, false, false};
  23.    static Class[] AT_CLASSES = new Class[]{Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String"), Class.forName("java.lang.String")};
  24.    static int[] AT_WIDTHS = new int[]{150, 150, 150, 150, 80, 80, 80, 80, 150, 150};
  25.    static double[] AT_WEIGHTS = new double[]{0.1, 0.1, 0.1, 0.1, 0.01, 0.01, 0.01, 0.01, 0.1, 0.1};
  26.    static String[] AT_METAPROPS = new String[]{"osc:defaultCreate", "osc:defaultSet", "osc:dt", "osc:fkey", "osc:fullText", "osc:length", "osc:destroy", "osc:noScript", "osc:rename", "osc:storageName"};
  27.    static String[] AT_NAMES = new String[]{"defaultCreate", "defaultSet", "dt", "fkey", "fullText", "length", "destroy", "noScript", "rename", "storageName"};
  28.    static boolean[] AT_IS_LIST = new boolean[]{false, false, false, false, false, false, false, false, false, false};
  29.    static DataTypeIntf dtType;
  30.    static DataTypeIntf destroyType;
  31.  
  32.    OSCFlavor(SchemaIntf var1) {
  33.       super(var1);
  34.    }
  35.  
  36.    public String getExtensionsName() {
  37.       return "OneSoft";
  38.    }
  39.  
  40.    public String getFlavorName() {
  41.       return NAME;
  42.    }
  43.  
  44.    protected void createExtensionNamespaces() {
  45.       String[] var1 = this.getNamespaces();
  46.       int var2 = 0;
  47.  
  48.       while(var2 < var1.length) {
  49.          String var3 = var1[var2++];
  50.          String var4 = var1[var2++];
  51.          if (super.schema.getNamedDeclaration(var3, Class.forName("com.extensibility.xml.NamespaceDeclaration")) == null) {
  52.             NamespaceDeclaration var5 = new NamespaceDeclaration(var3, var4);
  53.             super.schema.insertDeclaration(var5, (BaseDeclaration)null);
  54.          }
  55.       }
  56.  
  57.    }
  58.  
  59.    public void parse(URI var1, URI var2, int var3, Object var4) throws IOException {
  60.       super.parse(var1, var2, var3, var4);
  61.       NamespaceDeclaration var5 = super.schema.getNamedNamespace(NAMESPACES[0]);
  62.       if (var5 != null) {
  63.          super.schema.removeDeclaration(var5);
  64.       }
  65.  
  66.    }
  67.  
  68.    private void checkForErrors(BaseDeclaration var1, DataType var2) {
  69.       if (var2 != null && var2.equals(DataTypeIntf.STRING) && var1.getMetaProp("osc:length") == null) {
  70.          var1.addError(new ParserException(999, "Strings must have their osc:length specified in OSC schemas."));
  71.       }
  72.  
  73.       if (var2 != null && var2.equals(DataTypeIntf.FIXED144) && var1.getMetaProp("osc:dt") == null) {
  74.          var1.addError(new ParserException(999, "Currency must have their osc:dt specified in OSC schemas."));
  75.       }
  76.  
  77.       if (var1.getMetaProp("osc:dt") != null && (new String("money,string,text,dateTime")).indexOf(var1.getMetaProp("osc:dt").toString()) == -1) {
  78.          var1.addError(new ParserException(999, "osc:dt must be one of [money, string, text, dateTime] in OSC schemas."));
  79.       }
  80.  
  81.       if (var1.getMetaProp("osc:length") != null) {
  82.          String var3 = var1.getMetaProp("osc:length").toString();
  83.          int var4 = -1;
  84.  
  85.          try {
  86.             var4 = Integer.parseInt(var3);
  87.          } catch (NumberFormatException var6) {
  88.          }
  89.  
  90.          if (var4 <= 0) {
  91.             var1.addError(new ParserException(999, "osc:length, if present, must be >= 1 in OSC schemas."));
  92.          }
  93.       }
  94.  
  95.       if (var1.getMetaProp("osc:destroy") != null && (new String("warn,no")).indexOf(var1.getMetaProp("osc:destroy").toString()) == -1) {
  96.          var1.addError(new ParserException(999, "osc:destroy must be one of [warn, no] in OSC schemas."));
  97.       }
  98.  
  99.       if (var1.getMetaProp("osc:rename") != null && !DTDParser.isName(var1.getMetaProp("osc:rename").toString())) {
  100.          var1.addError(new ParserException(999, "osc:rename, if present must be a valid xml name in OSC schemas."));
  101.       }
  102.  
  103.    }
  104.  
  105.    public void checkForErrors(BaseDeclaration var1) {
  106.       super.checkForErrors(var1);
  107.       if (var1 instanceof ElementDeclaration) {
  108.          ElementDeclaration var2 = (ElementDeclaration)var1;
  109.          ContentModel var3 = var2.getEffectiveModel();
  110.          boolean var4 = false;
  111.          ContentModelTerm var5 = var3.getRootGroup();
  112.          if (var5 != null && var2.getAllowsTags()) {
  113.             ContentModelTermEnum var6 = var5.getTerms(true);
  114.  
  115.             while(var6.hasMoreElements()) {
  116.                ContentModelTerm var7 = (ContentModelTerm)var6.nextElement();
  117.                if (var7.isGroup()) {
  118.                   var1.addError(new ParserException(999, "Groups (parentheses) are not permitted in OSC schemas."));
  119.                }
  120.             }
  121.          }
  122.  
  123.          if (var3.isTagsOnly()) {
  124.             if (((ContentModelTerm)var3).getChildConnection(true) != '|' && ((ContentModelTerm)var3).getChildConnection(true) != 0) {
  125.                var1.addError(new ParserException(999, "Only 'many' models [e.g. (a | b | c)*] permitted in OSC schemas."));
  126.             } else if (((ContentModelTerm)var3).getOccurance() != '*') {
  127.                var1.addError(new ParserException(999, "only 'many' models [e.g. (a | b | c)*] permitted in OSC schemas."));
  128.             }
  129.          }
  130.  
  131.          if (var3.isMixed()) {
  132.             var1.addError(new ParserException(999, "Mixed models (text and elements together) are not permitted in OSC schemas."));
  133.          }
  134.  
  135.          if (var3.isTextOnly() && var2.getDataType() == null) {
  136.             var1.addError(new ParserException(999, "Text elements must have a datatype specified in OSC schemas."));
  137.          }
  138.  
  139.          this.checkForErrors(var1, var2.getDataType());
  140.       } else if (var1 instanceof AttributeDeclaration) {
  141.          AttributeDeclaration var8 = (AttributeDeclaration)var1;
  142.          if (var8.getDataType() == null) {
  143.             var1.addError(new ParserException(999, "Attributes must have a datatype specified in OSC schemas."));
  144.          }
  145.  
  146.          this.checkForErrors(var1, var8.getDataType());
  147.       } else if (var1 instanceof NamespaceDeclaration) {
  148.          NamespaceDeclaration var9 = (NamespaceDeclaration)var1;
  149.          if (((BaseDeclaration)var9).getName().equals(NAMESPACES[0]) && !var9.getNamespace().equals(NAMESPACES[1])) {
  150.             var1.addError(new ParserException(999, String.valueOf(String.valueOf("The osc namespace must be ").concat(String.valueOf(NAMESPACES[1]))).concat(String.valueOf(" in OSC schemas."))));
  151.          }
  152.       }
  153.  
  154.    }
  155.  
  156.    public boolean isSupported(String var1) {
  157.       return var1.equals("GESTALT_FORBID_LOCAL_ATTRS") ? true : super.isSupported(var1);
  158.    }
  159.  
  160.    public int getExtraColumnCount(int var1) {
  161.       if (var1 == 1) {
  162.          return EL_METAPROPS.length;
  163.       } else if (var1 != 3 && var1 != 4) {
  164.          return var1 == 2 ? CP_METAPROPS.length : 0;
  165.       } else {
  166.          return AT_METAPROPS.length;
  167.       }
  168.    }
  169.  
  170.    public String getColumnName(int var1, int var2) {
  171.       if (var1 == 1) {
  172.          return EL_NAMES[var2];
  173.       } else if (var1 != 3 && var1 != 4) {
  174.          return var1 == 2 ? CP_NAMES[var2] : null;
  175.       } else {
  176.          return AT_NAMES[var2];
  177.       }
  178.    }
  179.  
  180.    public Class getColumnClass(int var1, int var2) {
  181.       if (var1 == 1) {
  182.          return EL_CLASSES[var2];
  183.       } else if (var1 != 3 && var1 != 4) {
  184.          return var1 == 2 ? CP_CLASSES[var2] : null;
  185.       } else {
  186.          return AT_CLASSES[var2];
  187.       }
  188.    }
  189.  
  190.    public int getInitialColumnWidth(int var1, int var2) {
  191.       if (var1 == 1) {
  192.          return EL_WIDTHS[var2];
  193.       } else if (var1 != 3 && var1 != 4) {
  194.          return var1 == 2 ? CP_WIDTHS[var2] : 0;
  195.       } else {
  196.          return AT_WIDTHS[var2];
  197.       }
  198.    }
  199.  
  200.    public double getColumnWeight(int var1, int var2) {
  201.       if (var1 == 1) {
  202.          return EL_WEIGHTS[var2];
  203.       } else if (var1 != 3 && var1 != 4) {
  204.          return var1 == 2 ? CP_WEIGHTS[var2] : (double)0.0F;
  205.       } else {
  206.          return AT_WEIGHTS[var2];
  207.       }
  208.    }
  209.  
  210.    public String getColumnMetaProp(int var1, int var2) {
  211.       if (var1 == 1) {
  212.          return EL_METAPROPS[var2];
  213.       } else if (var1 != 3 && var1 != 4) {
  214.          return var1 == 2 ? CP_METAPROPS[var2] : null;
  215.       } else {
  216.          return AT_METAPROPS[var2];
  217.       }
  218.    }
  219.  
  220.    public boolean isColumnMetaPropList(int var1, int var2) {
  221.       if (var1 == 1) {
  222.          return EL_IS_LIST[var2];
  223.       } else if (var1 != 3 && var1 != 4) {
  224.          return var1 == 2 ? CP_IS_LIST[var2] : false;
  225.       } else {
  226.          return AT_IS_LIST[var2];
  227.       }
  228.    }
  229.  
  230.    public DataTypeIntf getDataType(int var1, int var2) {
  231.       String var3 = this.getColumnName(var1, var2);
  232.       if (var3.equals("dt")) {
  233.          return dtType;
  234.       } else {
  235.          return var3.equals("destroy") ? destroyType : null;
  236.       }
  237.    }
  238.  
  239.    public String getDefaultValue(int var1, int var2) {
  240.       return null;
  241.    }
  242.  
  243.    public boolean isColumnMetaPropAttrs(int var1, int var2) {
  244.       return false;
  245.    }
  246.  
  247.    public String[] getNamespaces() {
  248.       return NAMESPACES;
  249.    }
  250.  
  251.    static {
  252.       dtType = DataTypeFactory.createDataType(DataTypeIntf.ENUMERATION).setOptions("money|string|text|dateTime");
  253.       destroyType = DataTypeFactory.createDataType(DataTypeIntf.ENUMERATION).setOptions("warn|no");
  254.    }
  255. }
  256.